package com.learn.acm.six;

import org.junit.jupiter.api.Test;

/**
 * 给定一个字符串 s，计算具有相同数量0和1的非空(连续)子字符串的数量，并且这些子字符串中的所有0和所有1都是组合在一起的。
 *
 * 重复出现的子串要计算它们出现的次数。
 *
 * 示例 1 :
 *
 * 输入: "00110011"
 * 输出: 6
 * 解释: 有6个子串具有相同数量的连续1和0：“0011”，“01”，“1100”，“10”，“0011” 和 “01”。
 *
 * 请注意，一些重复出现的子串要计算它们出现的次数。
 *
 * 另外，“00110011”不是有效的子串，因为所有的0（和1）没有组合在一起。
 * 示例 2 :
 *
 * 输入: "10101"
 * 输出: 4
 * 解释: 有4个子串：“10”，“01”，“10”，“01”，它们具有相同数量的连续1和0。
 * 注意：
 *
 * s.length 在1到50,000之间。
 * s 只包含“0”或“1”字符。
 */
public class Solution696 {

    public int countBinarySubstrings(String s) {
        if(s == null || s.length() == 0) return 1;

        int result = 0, start=0,end=0;
        boolean isChange=false;
        while (start < s.length()) {
            end = start + 1;
            if (end < s.length() && s.charAt(end) != s.charAt(start)) {
                start++;
                isChange = false;
                result++;
                continue;
            }
            while (end < s.length()) {
                if (!isChange) {
                    if (s.charAt(end) != s.charAt(end-1)) {
                        isChange = true;
                    }
                    end++;
                    continue;
                } else {
                    if (s.charAt(end) != s.charAt(end-1)) {
                        isChange = false;
                        break;
                    }
                    int midNum = (end-start+1);
                    if ((midNum) % 2 == 0) {
                        if (s.charAt(midNum /2) == s.charAt(midNum/2+1) ) {
                            isChange = false;
                            result++;
                            break;
                        } else {
                            isChange = false;
                            break;
                        }
                    }
                    end++;
                }
            }
            start++;
        }
        return result;
    }

    @Test
    public void test696() {
        System.out.println(countBinarySubstrings("1010001"));
    }

}
